package cn.spdb.harrier.common.log;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.sift.AbstractDiscriminator;
import cn.spdb.harrier.common.utils.LoggerUtils;

public class TaskLogDiscriminator extends AbstractDiscriminator<ILoggingEvent> {

	private String key;

/**
 * 提取日志事件中与任务（task）相关的鉴别值，用于日志文件的多路复用（sifting）。
 *
 * 该方法检查日志记录器名称是否以特定前缀（如 "TASK_STEP_LOGGER_PREFIX"）开头，
 * 如果是，则截取其中的任务标识部分并返回；否则返回默认值 "unknown_task"。
 *
 * @param event 日志事件对象
 * @return 与任务相关联的鉴别值，用于决定日志输出的目标文件
 */
	@Override
	public String getDiscriminatingValue(ILoggingEvent event) {
    	String loggerName = event.getLoggerName();
    	String prefix = LoggerUtils.TASK_STEP_LOGGER_PREFIX;
    	if (loggerName.startsWith(prefix)) {
        // 截取前缀后的内容，并去掉末尾的标识符（如 logger 名为 "[StepId=task123]"，则返回 "task123"）
        	return loggerName.substring(prefix.length(), loggerName.length() - 1);
    	} else {
        	return "unknown_task";
    	}
	}


	@Override
	public void start() {
		started = true;
	}

	@Override
	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

}
